<?php

/**
 * Outils necessaire pour les traitements sur un image.
 * 
 * @author <a href="mailto:cdramsy@yahoo.fr">Christian DRAMSY</a>
 */
class OutilsImage {

    /**
     * Methode qui retourne la dimension possible d'un image par rapport à un nouveau largeur
     *  ex : image de 500X200 si la largeur la nouvelle larseur qu'on veux est de 250 alors la longueur sera 100
     *
     * @param $filename le nom de l'image
     * @param $nouvelleLargeur la nouvelle largeur qu'on désire
     */
    public static function dimensionPotentielByLargeur($filename, $nouvelleLargeur) {
        /**
         * Tableau qui contient les fonctions à excuter selon une extension de fichier.
         */
        $fonctionParExtension = array(
            "jpg" => "imagecreatefromjpeg",
            "jpeg" => "imagecreatefromjpeg",
            "png" => "imagecreatefrompng"
        );
        //  si l'extension du fichier est valide
        if (OutilsImage::extensionValide($filename)) {
            // on récupère l'extension du fichier.
            $extension = OutilsImage::extensionFichier($filename);

            //  on execute la fonction grace au tableau fonctionParExtension
            $imageChoisie = $fonctionParExtension[$extension]($filename);
            //  tableau qui contiendra les dimensions de l'image
            //  [0] c'est la largeur
            //  [1] c'est la hauteur
            $tailleImageChoisie = getimagesize($filename);

            //   la nouvelle largeur
            $newWidth = 0;
            //  la nouvelle hauteur(longueur)
            $newHeight = 0;
            //  tableau où on stockera les dimensions
            $dimension = array("largeur" => "",
                "hauteur" => "");

            //  si la nouvelle largeur voulue est inferieur la largeur actuelle
            if ($tailleImageChoisie[0] > $nouvelleLargeur) {
                // on va retrecir l'image.
                $newWidth = $nouvelleLargeur;
                $reduction = ($nouvelleLargeur * 100) / $tailleImageChoisie[0];
                $newHeight = ($tailleImageChoisie[1] * $reduction) / 100;
            } else {
                // on laisse les dimension actuelles.
                $newWidth = $tailleImageChoisie[0];
                $newHeight = $tailleImageChoisie[1];
            } // if
            //  liberation de la memoire
            imagedestroy($imageChoisie);
            $dimension["largeur"] = $newWidth;
            $dimension["hauteur"] = $newHeight;

            return $dimension;
        }

        return NULL;
    }

    /**
     * Methode qui retourne la dimension possible d'un image par rapport à un nouvel hauteur
     *  ex : image de 500X200 si la largeur la nouvelle hauteur qu'on veux est de 100 alors la largeur sera 250.
     *
     * @param $filename le nom de l'image
     * @param $nouvelleHauteur le nouvel hauteur qu'on désire
     */
    public static function dimensionPotentielByHauteur($filename, $nouvelHauteur) {
        /**
         * Tableau qui contient les fonctions à excuter selon une extension de fichier.
         */
        $fonctionParExtension = array(
            "jpg" => "imagecreatefromjpeg",
            "jpeg" => "imagecreatefromjpeg",
            "png" => "imagecreatefrompng"
        );
        //  si l'extension du fichier est valide
        if (OutilsImage::extensionValide($filename)) {
            // on récupère l'extension du fichier.
            $extension = OutilsImage::extensionFichier($filename);

            //  on execute la fonction grace au tableau fonctionParExtension
            $imageChoisie = $fonctionParExtension[$extension]($filename);
            //  tableau qui contiendra les dimensions de l'image
            //  [0] c'est la largeur
            //  [1] c'est la hauteur
            $tailleImageChoisie = getimagesize($filename);

            //   la nouvelle largeur
            $newWidth = 0;
            //  la nouvelle hauteur(longueur)
            $newHeight = 0;
            //  tableau où on stockera les dimensions
            $dimension = array("largeur" => "",
                "hauteur" => "");

            //  si le nouvel Hauteur voulu est inferieur l'hauteur actuel
            if ($tailleImageChoisie[1] > $nouvelHauteur) {
                // on va retrecir l'image.
                $newHeight= $nouvelHauteur;
                $reduction = ($nouvelHauteur * 100) / $tailleImageChoisie[1];
                $newWidth = ($tailleImageChoisie[0] * $reduction) / 100;
            } else {
                // on laisse les dimension actuelles.
                $newWidth = $tailleImageChoisie[0];
                $newHeight = $tailleImageChoisie[1];
            } // if
            //  liberation de la memoire
            imagedestroy($imageChoisie);
            $dimension["largeur"] = $newWidth;
            $dimension["hauteur"] = $newHeight;

            return $dimension;
        }

        return NULL;
    }

    /**
     * Retourne l'extension d'un fichier
     *
     * @param $filename : Le fichier
     * @return l'extension du fichier
     */
    public static function extensionFichier($filename) {
        $tableau = explode('.', $filename);
        $extension;
        foreach ($tableau as $extension
            );
        return strtolower($extension);
    }

    /**
     * Verifie si l'extension d'un fichier est valide ou pas
     *
     * @return bolléen vrai ou faux
     */
    public static function extensionValide($filename) {
        $extensionsValide = array('png');
        $extensionFichier = strtolower(OutilsImage::extensionFichier($filename));

        return(in_array($extensionFichier, $extensionsValide));
    }

}
